
Sora Fujimoto
AI Solutions Architect

EasySpiderは、コードを書かずにブラウザの自動化タスクを設計・実行できる強力な視覚的なウェブスクレイピングツールです。直感的なフローチャートベースのインターフェースにより、プログラミング経験のないユーザーでも使いやすく、開発者向けには高度な機能も備えています。
CapSolverは、EasySpiderの自動化体験を完結させるために、シームレスなCAPTCHA解決を提供します。EasySpiderは複数のCAPTCHA認識方式をサポートしていますが、CapSolverのAI駆動の解決ソリューションを統合することで、reCAPTCHA、Cloudflare Turnstile、その他のCAPTCHAチャレンジを信頼性高く高速に回避できます。
EasySpiderは、無料でオープンソースの視覚的なウェブクローラーおよびブラウザ自動化ツールです。従来のスクレイピングライブラリとは異なり、コード知識が不要で、ウェブ要素をクリックしてタスクを視覚的に設計できます。
EasySpiderは3つの基本原則に基づいて動作します:
| 特徴 | 説明 |
|---|---|
| 無限ループのネスト | 複雑なページネーションと多段階データ抽出を処理 |
| 条件分岐 | ページコンテンツに基づく決定ポイントを構築 |
| Breakステートメント | フローチャート内のどこでもループを終了 |
| 正規表現 | パターンマッチングでデータを抽出 |
| OCR認識 | 画像やスクリーンショットからテキストを抽出 |
| プロキシサポート | IPをローテーションし、接続をトンネル化 |
CapSolverは、さまざまなCAPTCHAチャレンジを回避するためのAI駆動のソリューションを提供するリーディングCAPTCHA解決サービスです。複数のCAPTCHAタイプをサポートし、高速な応答時間を提供するため、自動化ワークフローにシームレスに統合できます。
EasySpiderは組み込みのCAPTCHAサポートを提供していますが、CapSolverを統合することで以下のような利点があります:
EasySpider_windows_x64.zipEasySpider_windows_x86.zipEasySpider_MacOS.dmgEasySpider_Linux_x64.tar.gzEasySpider.exe(Windows)または適切な実行ファイルを実行注意: プロセス間通信にポート8084が利用可能であることを確認してください。
CapSolverのヘルパー スクリプトを使用する予定がある場合:
pip install requests
Pythonワークフローに適した再利用可能なCapSolverユーティリティクラスです:
import requests
import time
from typing import Optional
from dataclasses import dataclass
CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'
@dataclass
class TaskResult:
status: str
solution: Optional[dict] = None
error_description: Optional[str] = None
class CapSolverService:
def __init__(self, api_key: str = CAPSOLVER_API_KEY):
self.api_key = api_key
self.base_url = 'https://api.capsolver.com'
def create_task(self, task_data: dict) -> str:
response = requests.post(
f'{self.base_url}/createTask',
json={
'clientKey': self.api_key,
'task': task_data
}
)
data = response.json()
if data.get('errorId', 0) != 0:
raise Exception(f"CapSolverエラー: {data.get('errorDescription')}")
return data['taskId']
def get_task_result(self, task_id: str, max_attempts: int = 60) -> TaskResult:
for _ in range(max_attempts):
time.sleep(2)
response = requests.post(
f'{self.base_url}/getTaskResult',
json={
'clientKey': self.api_key,
'taskId': task_id
}
)
data = response.json()
if data.get('status') == 'ready':
return TaskResult(
status='ready',
solution=data.get('solution')
)
if data.get('status') == 'failed':
raise Exception(f"タスク失敗: {data.get('errorDescription')}")
raise Exception('CAPTCHA解決待ちのタイムアウト')
def solve_recaptcha_v2(self, website_url: str, website_key: str) -> str:
task_id = self.create_task({
'type': 'ReCaptchaV2TaskProxyLess',
'websiteURL': website_url,
'websiteKey': website_key
})
result = self.get_task_result(task_id)
return result.solution.get('gRecaptchaResponse', '') if result.solution else ''
def solve_turnstile(
self,
website_url: str,
website_key: str,
action: Optional[str] = None,
cdata: Optional[str] = None
) -> str:
task_data = {
'type': 'AntiTurnstileTaskProxyLess',
'websiteURL': website_url,
'websiteKey': website_key
}
if action or cdata:
metadata = {}
if action:
metadata['action'] = action
if cdata:
metadata['cdata'] = cdata
task_data['metadata'] = metadata
task_id = self.create_task(task_data)
result = self.get_task_result(task_id)
return result.solution.get('token', '') if result.solution else ''
# グローバルインスタンス
capsolver = CapSolverService()
EasySpiderはCapSolverを統合する複数の方法を提供します。ご自身の使用ケースに最も適した方法を選択してください。
EasySpiderはワークフロー内でカスタムJavaScriptを実行できます。これは最も直感的な統合方法です。
ステップ1: EasySpiderで新しいタスクを作成し、CAPTCHA保護ページに移動します
ステップ2: 以下のJavaScriptを含む「カスタムアクション」ノードを追加します:
// reCAPTCHA要素からsitekeyを抽出
var siteKey = document.querySelector('.g-recaptcha').getAttribute('data-sitekey');
var pageUrl = window.location.href;
// 次のステップで使用するための保存
window.captchaSiteKey = siteKey;
window.captchaPageUrl = pageUrl;
// デバッグ用のログ
console.log('Site Key:', siteKey);
console.log('Page URL:', pageUrl);
ステップ3: EasySpiderの外部システムコール機能を使用して、CAPTCHAを解決しトークンを返すPythonスクリプトを呼び出します
ステップ4: トークンを挿入する別の「カスタムアクション」ノードを追加します:
// 外部スクリプトから渡されたトークン
var token = arguments[0]; // EasySpiderから渡される
// レスポンステキストエリアを表示しトークンを設定
document.getElementById('g-recaptcha-response').style.display = 'block';
document.getElementById('g-recaptcha-response').value = token;
// コールバック関数がある場合、実行
if (typeof ___grecaptcha_cfg !== 'undefined') {
var clients = ___grecaptcha_cfg.clients;
if (clients) {
Object.keys(clients).forEach(function(key) {
var client = clients[key];
if (client.callback) {
client.callback(token);
}
});
}
}
EasySpiderのビジュアルノードを使用してプロキシなしのTurnstileワークフローを構築します。プロキシは必要ありません。
ステップ1: 新しいタスクを作成し、Turnstile保護ページに移動します。
ステップ2: 3つのカスタムアクションノード(コードモード = JavaScript)を追加してTurnstileメタデータをキャプチャします:
// ノードタイトル: TS_SiteKey
return document.querySelector('.cf-turnstile')?.getAttribute('data-sitekey') || '';
// ノードタイトル: TS_Action(オプション)
return document.querySelector('.cf-turnstile')?.getAttribute('data-action') || '';
// ノードタイトル: TS_Cdata(オプション)
return document.querySelector('.cf-turnstile')?.getAttribute('data-cdata') || '';
ステップ3: システムコマンドを実行するノードを追加して、CapSolverでTurnstileを解決します:
python captcha_solver.py "{{current_url}}" "Field[\"TS_SiteKey\"]" "turnstile" "Field[\"TS_Action\"]" "Field[\"TS_Cdata\"]"
このノードに「Token」という名前を付けて、出力をField["Token"]として参照できるようにします。
ステップ4: カスタムアクションノード(JavaScript)を追加してトークンを挿入します:
var token = `Field["Token"]`;
var inputs = document.querySelectorAll('input[name="cf-turnstile-response"], input[name="turnstile-response"]');
inputs.forEach(function(el) {
el.value = token;
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
});
ステップ5: フォームの送信ボタンをクリックする(またはJSで送信)します。
注意: プロキシなしTurnstileは多くのサイトで動作しますが、一部の展開ではトークンがソルバーのIPに対して検証される場合があります。その場合、プロキシベースの解決が必要です。
上級ユーザー向けに、EasySpiderのPython実行エンジンを直接拡張できます。easyspider_executestage.pyスクリプトはタスク実行を処理し、CapSolver統合を含むように修正できます。
場所: {EasySpider_Directory}/Code/easyspider_executestage.py
実行コンテキストにCapSolverサービスを追加します:
# easyspider_executestage.pyの先頭にインポートを追加
import requests
import time
# CapSolverクラスを追加
class CapSolverService:
# ...(上記の実装)...
pass
# グローバルインスタンスを作成
capsolver = CapSolverService('YOUR_CAPSOLVER_API_KEY')
# これにより、eval/execブロック内でcapsolver.solve_recaptcha_v2()が利用可能になります
その後、EasySpiderタスクで「Pythonコードを実行」機能を使用します:
# EasySpiderのPython実行ブロックで
site_key = driver.find_element_by_class_name('g-recaptcha').get_attribute('data-sitekey')
token = capsolver.solve_recaptcha_v2(current_url, site_key)
driver.execute_script(f'''
document.getElementById('g-recaptcha-response').value = `{token}`;
''')
import time
from functools import wraps
from typing import Callable, TypeVar, Any
T = TypeVar('T')
def retry(max_retries: int = 3, exponential_backoff: bool = True):
"""指数バックオフによるリトライロジックのデコレータ。"""
def decorator(func: Callable[..., T]) -> Callable[..., T]:
@wraps(func)
def wrapper(*args: Any, **kwargs: Any) -> T:
last_exception = None
for attempt in range(max_retries):
try:
return func(*args, **kwargs)
except Exception as e:
last_exception = e
if attempt < max_retries - 1:
delay = (2 ** attempt) if exponential_backoff else 1
print(f'試行 {attempt + 1} が失敗しました。{delay}秒後に再試行します...')
time.sleep(delay)
raise last_exception
return wrapper
return decorator
@retry(max_retries=3, exponential_backoff=True)
def solve_with_retry(capsolver, url: str, site_key: str) -> str:
return capsolver.solve_recaptcha_v2(url, site_key)
def check_balance(api_key: str) -> float:
response = requests.post(
'https://api.capsolver.com/getBalance',
json={'clientKey': api_key}
)
data = response.json()
return data.get('balance', 0)
def main():
balance = check_balance(CAPSOLVER_API_KEY)
if balance < 1:
print('警告: CapSolverの残高が少ないです!再充電してください。')
else:
print(f'現在の残高: ${balance:.2f}')
コマンドラインからEasySpiderタスクを実行します:
# 基本的な実行
python easyspider_executestage.py --id [task_id] --read_type local --headless 1
# 全パラメータで実行
python easyspider_executestage.py \
--ids [0] \
--server_address http://localhost:8074 \
--config_folder "./" \
--headless 1 \
--read_type local
以下に、CapSolver統合を含む完全なEasySpiderワークフローの作成方法を示します:
https://www.google.com/recaptcha/api2/demo)captcha_solver.py を EasySpider ディレクトリに保存してください:#!/usr/bin/env python3
"""
CapSolver ヘルパー スクリプト for EasySpider
使用方法: python captcha_solver.py <url> <site_key> <captcha_type> [action] [cdata]
"""
import sys
import requests
import time
CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'
def solve_captcha(url, site_key, captcha_type='recaptcha_v2', action=None, cdata=None):
"""CAPTCHA を解決し、トークンを返します。"""
if captcha_type == 'recaptcha_v2':
task_type = 'ReCaptchaV2TaskProxyLess'
elif captcha_type == 'turnstile':
task_type = 'AntiTurnstileTaskProxyLess'
else:
raise ValueError(f'不明な CAPTCHA タイプ: {captcha_type}')
# タスクを作成
task = {
'type': task_type,
'websiteURL': url,
'websiteKey': site_key
}
if captcha_type == 'turnstile' and (action or cdata):
metadata = {}
if action:
metadata['action'] = action
if cdata:
metadata['cdata'] = cdata
task['metadata'] = metadata
response = requests.post(
'https://api.capsolver.com/createTask',
json={
'clientKey': CAPSOLVER_API_KEY,
'task': task
}
)
data = response.json()
if data.get('errorId', 0) != 0:
raise Exception(f"エラー: {data.get('errorDescription')}")
task_id = data['taskId']
# 結果をポーリング
for _ in range(60):
time.sleep(2)
response = requests.post(
'https://api.capsolver.com/getTaskResult',
json={
'clientKey': CAPSOLVER_API_KEY,
'taskId': task_id
}
)
data = response.json()
if data.get('status') == 'ready':
solution = data.get('solution', {})
return solution.get('gRecaptchaResponse') or solution.get('token')
if data.get('status') == 'failed':
raise Exception(f"失敗: {data.get('errorDescription')}")
raise Exception('タイムアウト')
if __name__ == '__main__':
if len(sys.argv) < 3:
print('使用方法: python captcha_solver.py <url> <site_key> [captcha_type] [action] [cdata]')
sys.exit(1)
url = sys.argv[1]
site_key = sys.argv[2]
captcha_type = sys.argv[3] if len(sys.argv) > 3 else 'recaptcha_v2'
action = sys.argv[4] if len(sys.argv) > 4 else None
cdata = sys.argv[5] if len(sys.argv) > 5 else None
try:
token = solve_captcha(url, site_key, captcha_type, action, cdata)
print(token) # EasySpider がキャプチャするためのトークンを出力
except Exception as e:
print(f'エラー: {e}', file=sys.stderr)
sys.exit(1)
EasySpider のワークフローで、"Execute System Command" ノードを追加します:
python captcha_solver.py "{{current_url}}" "{{site_key}}" "recaptcha_v2"
Turnstile (プロキシレス) 用に:
python captcha_solver.py "{{current_url}}" "{{site_key}}" "turnstile" "{{action}}" "{{cdata}}"
出力された (トークン) は、後続の JavaScript インジェクション ステップでキャプチャして使用できます。
CapSolver を EasySpider に統合することで、視覚的なウェブ自動化に強力な組み合わせが生まれます。EasySpider の直感的なフローチャートインターフェースにより、誰でもタスクの設計が可能です。一方、CapSolver は、それ otherwise でブロックされる CAPTCHA の課題を処理します。
この統合の主な利点:
データ抽出パイプライン、モニタリングシステム、自動テストフレームワークを構築している場合、EasySpider + CapSolver の組み合わせは、現代のウェブ自動化に必要な視覚的な設計体験と CAPTCHA 解決能力を提供します。
始めましょうか? CapSolver に登録 し、初回チャージで EASYSPIDER のボーナスコードを使用してください!
EasySpider は、コードを書かずにタスクを視覚的に設計できる無料でオープンソースのウェブスクレイピングおよびブラウザ自動化ツールです。また、Advanced なユースケース用にカスタム JavaScript、Python コード、Selenium ステートメントもサポートしています。
CapSolver は、EasySpider のワークフロー内でカスタム JavaScript インジェクション、システムコマンドで呼び出す外部 Python スクリプト、または EasySpider の Python 実行エンジンを直接修正する方法で統合されます。すべての方法は CapSolver の API を使用して CAPTCHA を解決し、トークンをページにインジェクションします。
EasySpider は一部の CAPTCHA 認識スキームと OCR 機能を内蔵しています。しかし、CapSolver と統合することで、プロダクション用の自動化ワークフローでより高い成功確率、より早い解決時間、そして広範な CAPTCHA タイプのカバーが可能になります。
CapSolver は、reCAPTCHA v2、reCAPTCHA v3、Cloudflare Turnstile、AWS WAF、GeeTest v3/v4 など、幅広い CAPTCHA タイプをサポートしています。
CapSolver は、解決する CAPTCHA の種類と量に基づいて競争力のある料金を提供しています。現在の料金詳細については capsolver.com を参照してください。初回チャージで EASYSPIDER のコードを使用すると、5% のボーナスが受けられます。
はい、EasySpider は AGPL-3.0 ライセンスの下で完全に無料でオープンソースです。ソフトウェアは無料の商用利用および修正が可能です。ネットワークサービスの展開では、ユーザーにソースコードへのアクセスを提供する必要があります。
サイトキーは通常、ページの HTML ソースに含まれています:
.g-recaptcha 要素の data-sitekey 属性.cf-turnstile 要素の data-sitekey 属性はい、easyspider_executestage.py を通じて EasySpider はコマンドライン実行をサポートしています。これにより、他のシステムとの統合、スケジュールされたタスク実行、ヘッドレス自動化が可能になります。
EasySpider は Windows (x64/x86)、macOS、Linux に対応しています。適切なバージョンは GitHub リリースページからダウンロードできます。
はい、EasySpider はプロキシ IP 設定およびトンネルスイッチングをサポートしています。タスク設定または EasySpider のブラウザ起動オプションを通じてプロキシを構成できます。
スケーラブルなRustウェブスクレイピングアーキテクチャを学びましょう。リクエスト、スクレイパー、非同期スクレイピング、ヘッドレスブラウザスクレイピング、プロキシローテーション、およびコンプライアンス対応のCAPTCHA処理で。

2026年のデータ・アズ・ア・サービス(DaaS)を理解する。その利点、ユースケース、およびリアルタイムの洞察と拡張性を通じて企業を変革する方法について探る。
